题意:对于一句原句和听到的句子,理解方式是将听到的句子替换掉原句的相同部分,替换成$*$,使得原句形成一个新的句子,以达到新的意思,你的任务是统计有多少种意思
$dp+hash$
设子串长度为$m$,$f_{i}$表示到子串末尾在原句是第$i$个位置有几种方案,显然对于每个$f_{i}$有三种情况,当原句以$i$结尾的长度为$m$的字符串等于子串$f_{i}=f_{i-1}+f_{i-m}$,即选或不选,否则$f_{i}=f_{i-1}$,只能不选;
1 |
|
题意:对于一句原句和听到的句子,理解方式是将听到的句子替换掉原句的相同部分,替换成$*$,使得原句形成一个新的句子,以达到新的意思,你的任务是统计有多少种意思
$dp+hash$
设子串长度为$m$,$f_{i}$表示到子串末尾在原句是第$i$个位置有几种方案,显然对于每个$f_{i}$有三种情况,当原句以$i$结尾的长度为$m$的字符串等于子串$f_{i}=f_{i-1}+f_{i-m}$,即选或不选,否则$f_{i}=f_{i-1}$,只能不选;
1 | #include <bits/stdc++.h> |